For the purpose of this report, The Bay Area has been defined as
San Francisco and the 8 surrounding counties, namely Alameda, Contra
Costa, Marin, Napa, San Mateo, Santa Clara, Solano, and Sonoma
Counties.
Increasing post-pandemic work-from-home trends

The COVID-19 pandemic dramatically increased the acceptance of remote
work and flexible work hours in the Bay Area. According to a report by
WFH Research, by July of 2023,
12.7 percent of full-time workers worked fully remote, while 28.2
percent worked on a hybrid schedule. This has led to a phenomenon
referred to as the “donut effect,” that describes the population shift
away from city centers, creating a donut-like pattern. This trend is
characterized by a decrease in population density in urban cores,
particularly prominent during the COVID-19 pandemic, as remote work and
changing living preferences lead individuals to relocate from city
centers to surrounding suburbs or more spacious areas.
There are concerns that a city heavily dependent on tax revenues from
businesses and workers in city centers may face economic difficulties
due to a potential decrease in these revenues with the rise of remote
work. Although the primary focus of these concerns has been on the
outlook for office markets, the impact of remote work could also extend
to affect upcoming development initiatives and bring about shifts in
retail patterns.
library(extrafont)
library(gridtext)
library(grid)
grob_explanation <- grobTree(richtext_grob(
"<span style='background-color:white'>There has been am obvious spike in the<br>number residents working from home<br>within the Bay Area after 2019.</span>",
x=.3, y=0.3, hjust=0, gp=gpar(col = "grey30", fontsize=11), box_gp = gpar(col = "white", fill = "white"),
padding = margin(0,0,0,0,"in")))
ggplot(wfh_value, aes(x = year, y = estimate, group = 1)) +
# geom_ribbon(aes(ymax = estimate + moe, ymin = estimate - moe),
# fill = "navy",
# alpha = 0.4) +
geom_line(color ="#21918c") +
geom_point(color = "#21918c", size = 2) +
theme_minimal(base_size = 12) +
geom_vline(xintercept = "2019", linetype = "longdash", size = 0.3, color = "grey50") +
scale_y_continuous(label = scales::comma)+
# scale_y_continuous(labels = label_dollar(scale = .001, suffix = "k")) +
annotation_custom(grob_explanation)+
labs(title = "WFH residents in the Bay Area (all 9 counties)",
x = "Year",
y = "ACS estimate",
caption = "Data: US Census Bureau, ACS 5-year estimates") + theme_minimal()

Changes in Population Densities
The City of San Francisco observed decline in population density
within the city since the beginning of the COVID-19 pandemic, as
illustrated in the following maps. Recent research indicates a migration
away from San Francisco due to changing living patterns, particularly
the surge in remote work. In 2018, some of the most densely populated
census tracts were withing San Francisco.
However, we can see in 2021 the distribution changed significantly,
with the suburbs displaying an increase in population, while the core
city witnessed a decline. In 2021, the city experienced a notable 6.3
percent decrease in population, the highest in the past decade.This
analysis illustrates the donut effect in the Bay Area, with the City of
San Francisco as the urban core.
# Assuming 'bay_area_2018' is your data frame and 'TotalPop' is the column for which you want quartile breaks
quartile_breaks <- quantile(bay_area_2021$TotalPop, probs = c(0, 0.25, 0.5, 0.75, 1))
# Using mapview with quartile breaks
mapview(bay_area_2021, zcol = "TotalPop", at = quartile_breaks)
Comparing Property Values
Rents in high-density areas and central business districts have also
dropped since the pandemic’s onset, reflecting a shift in housing demand
from crowded urban centers to more spacious suburbs. Remote work has
contributed to a substantial decrease in commercial office occupancy
rates and subsequent declines in commercial property prices in densely
populated Bay Area tracts. The decline in property values is driven by
wealthier residents leaving high-value properties, potentially leading
to reduced property taxes and straining the city’s budget. Property
values, as indicated by rent, are significantly higher in the suburbs of
San Mateo and Santa Clara.
Takeaways for City Planners
The analysis provides compelling evidence of the donut effect taking
shape in the Bay Area. The widespread adoption of remote work is
revolutionizing the traditional dynamics of daily commuting to city
centers, like San Francisco.
As companies increasingly embrace remote work, employees experience
reduced necessity for daily commutes, potentially reshaping the
established patterns of rush hour transit activity associated with
bustling city centers. This shift has implications for specific transit
lines, such as the T Third Street line connecting southeastern
neighborhoods like Bayview-Hunters Point and Visitacion Valley to the
city’s downtown area. Encouraging mixed-use developments integrating
affordable housing with efficient public transportation options can
mitigate the donut effect’s impact and promote sustainable urban
living.
The trend towards remote work and changing residential preferences
may lead to a potential loss in tax revenue as individuals relocate from
urban areas, impacting the traditional tax base derived from city
residents. This poses a challenge for city finances, as decreased
population density within city limits could reduce property taxes and
other critical local revenues. In anticipation of this shortfall,
planners should proactively strategize and adopt a forward-thinking
approach to budgeting.
The adoption of remote work policies by tech companies is poised to
significantly alter office space utilization. Businesses may reduce
office footprints in response to a remote workforce, resulting in
potential office vacancies. Encouraging mixed-use development projects
within downtown areas can rejuvenate city centers by creating vibrant,
24/7 communities appealing to both residents and businesses.
The consequence of these changes can influence broader aspects of
urban development. There is a need for city planners to adapt and
strategize ensuring a harmonious transition in the Bay Area’s urban
landscape.
LS0tDQp0aXRsZTogIlRoZSBEb251dCBFZmZlY3Q6IEhvbGxvd2luZyBEb3dudG93biBpbiB0aGUgQmF5IEFyZWEiDQpzdWJ0aXRsZTogIiINCmF1dGhvcjogIlNhbXJpZGRoaSBLaGFyZSwgVW5pdmVyc2l0eSBvZiBQZW5uc3lsdmFuaWEiDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRoZW1lOiBjZXJ1bGVhbiANCi0tLQ0KDQoNCipGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyByZXBvcnQsIFRoZSBCYXkgQXJlYSBoYXMgYmVlbiBkZWZpbmVkIGFzIFNhbiBGcmFuY2lzY28gYW5kIHRoZSA4IHN1cnJvdW5kaW5nIGNvdW50aWVzLCBuYW1lbHkgQWxhbWVkYSwgQ29udHJhIENvc3RhLCBNYXJpbiwgTmFwYSwgU2FuIE1hdGVvLCBTYW50YSBDbGFyYSwgU29sYW5vLCBhbmQgU29ub21hIENvdW50aWVzLioNCg0KIyMjIEluY3JlYXNpbmcgcG9zdC1wYW5kZW1pYyB3b3JrLWZyb20taG9tZSB0cmVuZHMNCg0KDQo8aW1nIHNyYz0iLi9pbWFnZXMvc25henp5LWltYWdlLnBuZyIgd2lkdGg9IjMwMCIgYWxpZ249InJpZ2h0IiBzdHlsZT0iZGlzcGxheTogaW5saW5lOyBtYXJnaW46IDAgMTBweDsiLz4NCg0KDQpUaGUgQ09WSUQtMTkgcGFuZGVtaWMgZHJhbWF0aWNhbGx5IGluY3JlYXNlZCB0aGUgYWNjZXB0YW5jZSBvZiByZW1vdGUgd29yayBhbmQgZmxleGlibGUgd29yayBob3VycyBpbiB0aGUgQmF5IEFyZWEuIEFjY29yZGluZyB0byBhIHJlcG9ydCBieSBbV0ZIIFJlc2VhcmNoLF0oaHR0cHM6Ly93ZmhyZXNlYXJjaC5jb20vKSBieSBKdWx5IG9mIDIwMjMsIDEyLjcgcGVyY2VudCBvZiBmdWxsLXRpbWUgd29ya2VycyB3b3JrZWQgZnVsbHkgcmVtb3RlLCB3aGlsZSAyOC4yIHBlcmNlbnQgd29ya2VkIG9uIGEgaHlicmlkIHNjaGVkdWxlLiBUaGlzIGhhcyBsZWQgdG8gYSBwaGVub21lbm9uIHJlZmVycmVkIHRvIGFzIHRoZSAiZG9udXQgZWZmZWN0LCIgdGhhdCBkZXNjcmliZXMgdGhlIHBvcHVsYXRpb24gc2hpZnQgYXdheSBmcm9tIGNpdHkgY2VudGVycywgY3JlYXRpbmcgYSBkb251dC1saWtlIHBhdHRlcm4uIFRoaXMgdHJlbmQgaXMgY2hhcmFjdGVyaXplZCBieSBhIGRlY3JlYXNlIGluIHBvcHVsYXRpb24gZGVuc2l0eSBpbiB1cmJhbiBjb3JlcywgcGFydGljdWxhcmx5IHByb21pbmVudCBkdXJpbmcgdGhlIENPVklELTE5IHBhbmRlbWljLCBhcyByZW1vdGUgd29yayBhbmQgY2hhbmdpbmcgbGl2aW5nIHByZWZlcmVuY2VzIGxlYWQgaW5kaXZpZHVhbHMgdG8gcmVsb2NhdGUgZnJvbSBjaXR5IGNlbnRlcnMgdG8gc3Vycm91bmRpbmcgc3VidXJicyBvciBtb3JlIHNwYWNpb3VzIGFyZWFzLiANCiANClRoZXJlIGFyZSBjb25jZXJucyB0aGF0IGEgY2l0eSBoZWF2aWx5IGRlcGVuZGVudCBvbiB0YXggcmV2ZW51ZXMgZnJvbSBidXNpbmVzc2VzIGFuZCB3b3JrZXJzIGluIGNpdHkgY2VudGVycyBtYXkgZmFjZSBlY29ub21pYyBkaWZmaWN1bHRpZXMgZHVlIHRvIGEgcG90ZW50aWFsIGRlY3JlYXNlIGluIHRoZXNlIHJldmVudWVzIHdpdGggdGhlIHJpc2Ugb2YgcmVtb3RlIHdvcmsuIEFsdGhvdWdoIHRoZSBwcmltYXJ5IGZvY3VzIG9mIHRoZXNlIGNvbmNlcm5zIGhhcyBiZWVuIG9uIHRoZSBvdXRsb29rIGZvciBvZmZpY2UgbWFya2V0cywgdGhlIGltcGFjdCBvZiByZW1vdGUgd29yayBjb3VsZCBhbHNvIGV4dGVuZCB0byBhZmZlY3QgdXBjb21pbmcgZGV2ZWxvcG1lbnQgaW5pdGlhdGl2ZXMgYW5kIGJyaW5nIGFib3V0IHNoaWZ0cyBpbiByZXRhaWwgcGF0dGVybnMuDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KICBrbml0cjo6b3B0c19jaHVuayRzZXQoDQogICAgZWNobyA9IFRSVUUsDQogICAgd2FybmluZyA9IEZBTFNFLA0KICAgIG1lc3NhZ2UgPSBGQUxTRSwNCiAgICBvdXQud2lkdGggPSAnMTAwJScsDQogICAgZmlnLnJldGluYSA9Mw0KICApDQpgYGANCg0KYGBge3IgcGFja2FnZXMsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodGlkeWNlbnN1cykNCmxpYnJhcnkoc2YpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShzdHJpbmdyKQ0KbGlicmFyeShtYXB2aWV3KQ0KbGlicmFyeSh0aWdyaXMpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShnZ2JlZXN3YXJtKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KGdnaXJhcGgpDQpsaWJyYXJ5KHBsb3RseSkNCmBgYA0KDQpgYGB7ciBhY3MgbGlzdCwgaW5jbHVkZT1GQUxTRX0NCmFjc192YXJpYWJsZV9saXN0LjIwMjAgPC0gbG9hZF92YXJpYWJsZXMoMjAyMCwgI3llYXINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFjczUiLCAjZml2ZSB5ZWFyIEFDUyBlc3RpbWF0ZXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUgPSBUUlVFKQ0KDQphY3NfdmFyaWFibGVfbGlzdC4yMDE2IDwtIGxvYWRfdmFyaWFibGVzKDIwMTYsICN5ZWFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhY3M1IiwgI2ZpdmUgeWVhciBBQ1MgZXN0aW1hdGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlID0gVFJVRSkNCmBgYA0KDQpgYGB7ciB0aGVtZSwgaW5jbHVkZT1GQUxTRX0NCg0KdGhlbWVfc2sgPC0gZnVuY3Rpb24oYmFzZV9zaXplID0gMTIsIHRpdGxlX3NpemUgPSAxNikgew0KICBmb250IDwtICJzYW5zIg0KICANCiAgIyBDcmVhdGUgYSBiYXNlIHRoZW1lDQogIGJhc2VfdGhlbWUgPC0gdGhlbWVfbWluaW1hbCgpICsNCiAgICB0aGVtZSgNCiAgICAgIHBhbmVsLmdyaWQubWlub3IgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICBheGlzLnRpY2tzID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBmb250LCBzaXplID0gMTIpLA0KICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBmb250LCBzaXplID0gdGl0bGVfc2l6ZSwgY29sb3IgPSAiYmxhY2siKSwNCiAgICAgI3BhbmVsLmJvcmRlciA9IGVsZW1lbnRfcmVjdChjb2xvdXIgPSAiZ3JleTgwIiwgZmlsbCA9IE5BLCBzaXplID0gMSksDQogICAgICNwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IGZvbnQsIGNvbG9yID0gImJsYWNrIiksDQogICAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IGZvbnQsIHNpemUgPSAxMiksDQogICAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAiZ3JleTgwIiwgY29sb3IgPSAid2hpdGUiKSwNCiAgICAgIGF4aXMudGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBmb250LCBzaXplID0gMTApLA0KICAgICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IGZvbnQsIGhqdXN0ID0gMSksDQogICAgICBwYW5lbC5ncmlkLm1ham9yID0gZWxlbWVudF9saW5lKGNvbG91ciA9ICJncmV5ODAiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjEpLA0KICAgICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBmb250LCBjb2xvciA9ICJncmV5NTAiKSwNCiAgICAgIHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCkNCiAgICApDQogIA0KfQ0KYGBgDQoNCmBgYHtyIHdmaCBkYXRhLCBpbmNsdWRlPUZBTFNFfQ0KYmF5ID0gYygiU2FuIEZyYW5jaXNjbyIsICJBbGFtZWRhIiwgIkNvbnRyYSBDb3N0YSIsICJNYXJpbiIsICJOYXBhIiwgIlNhbiBNYXRlbyIsICJTYW50YSBDbGFyYSIsICJTb2xhbm8iLCAiU29ub21hIikNCg0KeWVhcnMgPC0gMjAwOToyMDIxDQpuYW1lcyh5ZWFycykgPC0geWVhcnMNCg0Kd2ZoX3ZhbHVlIDwtIG1hcF9kZnIoeWVhcnMsIH57DQogIGdldF9hY3MoDQogICAgZ2VvZ3JhcGh5ID0gImNvdW50eSIsDQogICAgdmFyaWFibGVzID0gIkI5OTA4N18wMDUiLA0KICAgIHN0YXRlID0gIkNBIiwNCiAgICBjb3VudHkgPSBiYXksDQogICAgeWVhciA9IC54LA0KICAgIHN1cnZleSA9ICJhY3M1Ig0KICApDQp9LCAuaWQgPSAieWVhciIpJT4lDQogIGdyb3VwX2J5KHllYXIpJT4lDQogIHN1bW1hcmlzZShlc3RpbWF0ZSA9IHN1bShlc3RpbWF0ZSkpICMsIG1vZSA9IG1heChtb2UpKQ0KYGBgDQoNCmBgYHtyIGdyYXBoIG9mIFdGSCwgZmlnLmhlaWdodD00LCBmaWcud2lkdGg9OH0NCmxpYnJhcnkoZXh0cmFmb250KQ0KbGlicmFyeShncmlkdGV4dCkNCmxpYnJhcnkoZ3JpZCkNCg0KZ3JvYl9leHBsYW5hdGlvbiA8LSBncm9iVHJlZShyaWNodGV4dF9ncm9iKA0KICAiPHNwYW4gc3R5bGU9J2JhY2tncm91bmQtY29sb3I6d2hpdGUnPlRoZXJlIGhhcyBiZWVuIGFtIG9idmlvdXMgc3Bpa2UgaW4gdGhlPGJyPm51bWJlciByZXNpZGVudHMgd29ya2luZyBmcm9tIGhvbWU8YnI+d2l0aGluIHRoZSBCYXkgQXJlYSBhZnRlciAyMDE5Ljwvc3Bhbj4iLCANCiAgeD0uMywgIHk9MC4zLCBoanVzdD0wLCBncD1ncGFyKGNvbCA9ICJncmV5MzAiLCBmb250c2l6ZT0xMSksIGJveF9ncCA9IGdwYXIoY29sID0gIndoaXRlIiwgZmlsbCA9ICJ3aGl0ZSIpLA0KICBwYWRkaW5nID0gbWFyZ2luKDAsMCwwLDAsImluIikpKQ0KDQpnZ3Bsb3Qod2ZoX3ZhbHVlLCBhZXMoeCA9IHllYXIsIHkgPSBlc3RpbWF0ZSwgZ3JvdXAgPSAxKSkgKyANCiMgIGdlb21fcmliYm9uKGFlcyh5bWF4ID0gZXN0aW1hdGUgKyBtb2UsIHltaW4gPSBlc3RpbWF0ZSAtIG1vZSksIA0KICMgICAgICAgICAgICAgZmlsbCA9ICJuYXZ5IiwNCiAgIyAgICAgICAgICAgIGFscGhhID0gMC40KSArIA0KICBnZW9tX2xpbmUoY29sb3IgPSIjMjE5MThjIikgKyANCiAgZ2VvbV9wb2ludChjb2xvciA9ICIjMjE5MThjIiwgc2l6ZSA9IDIpICsgDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTIpICsgDQogICAgZ2VvbV92bGluZSh4aW50ZXJjZXB0ID0gIjIwMTkiLCBsaW5ldHlwZSA9ICJsb25nZGFzaCIsIHNpemUgPSAwLjMsIGNvbG9yID0gImdyZXk1MCIpICsNCiAgIHNjYWxlX3lfY29udGludW91cyhsYWJlbCA9IHNjYWxlczo6Y29tbWEpKw0KIyAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IGxhYmVsX2RvbGxhcihzY2FsZSA9IC4wMDEsIHN1ZmZpeCA9ICJrIikpICsgDQogICBhbm5vdGF0aW9uX2N1c3RvbShncm9iX2V4cGxhbmF0aW9uKSsNCiAgbGFicyh0aXRsZSA9ICJXRkggcmVzaWRlbnRzIGluIHRoZSBCYXkgQXJlYSAoYWxsIDkgY291bnRpZXMpIiwNCiAgICAgICB4ID0gIlllYXIiLA0KICAgICAgIHkgPSAiQUNTIGVzdGltYXRlIiwNCiAgICAgICBjYXB0aW9uID0gIkRhdGE6IFVTIENlbnN1cyBCdXJlYXUsIEFDUyA1LXllYXIgZXN0aW1hdGVzIikgKyB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQojIyMgQ2hhbmdlcyBpbiBQb3B1bGF0aW9uIERlbnNpdGllcyANCg0KVGhlIENpdHkgb2YgU2FuIEZyYW5jaXNjbyBvYnNlcnZlZCBkZWNsaW5lIGluIHBvcHVsYXRpb24gZGVuc2l0eSB3aXRoaW4gdGhlIGNpdHkgc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgQ09WSUQtMTkgcGFuZGVtaWMsIGFzIGlsbHVzdHJhdGVkIGluIHRoZSBmb2xsb3dpbmcgbWFwcy4gUmVjZW50IHJlc2VhcmNoIGluZGljYXRlcyBhIG1pZ3JhdGlvbiBhd2F5IGZyb20gU2FuIEZyYW5jaXNjbyBkdWUgdG8gY2hhbmdpbmcgbGl2aW5nIHBhdHRlcm5zLCBwYXJ0aWN1bGFybHkgdGhlIHN1cmdlIGluIHJlbW90ZSB3b3JrLiBJbiAyMDE4LCBzb21lIG9mIHRoZSBtb3N0IGRlbnNlbHkgcG9wdWxhdGVkIGNlbnN1cyB0cmFjdHMgd2VyZSB3aXRoaW5nIFNhbiBGcmFuY2lzY28uIA0KDQpgYGB7ciBkYXRhIGZvciBpbnQgbWFwMSwgaW5jbHVkZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9DQoNCmJheV9hcmVhXzIwMTggPC0gZ2V0X2FjcygNCiAgZ2VvZ3JhcGh5ID0gInRyYWN0IiwNCiAgdmFyaWFibGVzID0gIkIwMTAwMV8wMDEiLCAjcG9wdWxhdGlvbg0KICB5ZWFyID0gMjAxOCwNCiAgc3RhdGUgPSAiQ0EiLA0KICBjb3VudHkgPSBiYXkgLA0KICBnZW9tZXRyeSA9IFRSVUUNCiklPiUNCiAgcmVuYW1lKFRvdGFsUG9wID0gZXN0aW1hdGUpDQoNCmBgYA0KDQpgYGB7ciBlY2hvPUZBTFNFfQ0KDQojIEFzc3VtaW5nICdiYXlfYXJlYV8yMDE4JyBpcyB5b3VyIGRhdGEgZnJhbWUgYW5kICdUb3RhbFBvcCcgaXMgdGhlIGNvbHVtbiBmb3Igd2hpY2ggeW91IHdhbnQgcXVhcnRpbGUgYnJlYWtzDQpxdWFydGlsZV9icmVha3MgPC0gcXVhbnRpbGUoYmF5X2FyZWFfMjAxOCRUb3RhbFBvcCwgcHJvYnMgPSBjKDAsIDAuMjUsIDAuNSwgMC43NSwgMSkpDQoNCiMgVXNpbmcgbWFwdmlldyB3aXRoIHF1YXJ0aWxlIGJyZWFrcw0KbWFwdmlldyhiYXlfYXJlYV8yMDE4LCB6Y29sID0gIlRvdGFsUG9wIiwgYXQgPSBxdWFydGlsZV9icmVha3MpDQoNCiNpbnRlcnZhbHMgPC0gYygwLCAzNzUwLCA3NTAwLCAxMTI1MCwgMTUwMDApDQoNCiMgVXNpbmcgbWFwdmlldyB3aXRoIGVxdWFsIGludGVydmFscw0KI21hcHZpZXcoYmF5X2FyZWFfMjAxOCwgemNvbCA9ICJUb3RhbFBvcCIsIGF0ID0gaW50ZXJ2YWxzKQ0KDQpgYGANCg0KDQoNCmBgYHtyIGludG1hcDEsIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQpjb2xzID0gYygnI2NhMDAyMCcsJyNmNGE1ODInLCcjOTJjNWRlJywnIzA1NzFiMCcpDQoNCm1hcHZpZXcoYmF5X2FyZWFfMjAxOCwgemNvbCA9ICJUb3RhbFBvcCIpDQpgYGANCg0KSG93ZXZlciwgd2UgY2FuIHNlZSBpbiAyMDIxIHRoZSBkaXN0cmlidXRpb24gY2hhbmdlZCBzaWduaWZpY2FudGx5LCB3aXRoIHRoZSBzdWJ1cmJzIGRpc3BsYXlpbmcgYW4gaW5jcmVhc2UgaW4gcG9wdWxhdGlvbiwgd2hpbGUgdGhlIGNvcmUgY2l0eSB3aXRuZXNzZWQgYSBkZWNsaW5lLiBJbiAyMDIxLCB0aGUgY2l0eSBleHBlcmllbmNlZCBhIG5vdGFibGUgNi4zIHBlcmNlbnQgZGVjcmVhc2UgaW4gcG9wdWxhdGlvbiwgdGhlIGhpZ2hlc3QgaW4gdGhlIHBhc3QgZGVjYWRlLlRoaXMgYW5hbHlzaXMgaWxsdXN0cmF0ZXMgdGhlIGRvbnV0IGVmZmVjdCBpbiB0aGUgQmF5IEFyZWEsIHdpdGggdGhlIENpdHkgb2YgU2FuIEZyYW5jaXNjbyBhcyB0aGUgdXJiYW4gY29yZS4gIA0KDQpgYGB7ciBkYXRhIGZvciBpbnQgbWFwMiwgaW5jbHVkZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9DQoNCmJheV9hcmVhXzIwMjEgPC0gZ2V0X2FjcygNCiAgZ2VvZ3JhcGh5ID0gInRyYWN0IiwNCiAgdmFyaWFibGVzID0gIkIwMTAwMV8wMDEiLCAjcG9wdWxhdGlvbg0KICB5ZWFyID0gMjAyMSwNCiAgc3RhdGUgPSAiQ0EiLA0KICBjb3VudHkgPSBiYXkgLA0KICBnZW9tZXRyeSA9IFRSVUUNCiklPiUNCiAgcmVuYW1lKFRvdGFsUG9wID0gZXN0aW1hdGUpDQoNCmBgYA0KDQpgYGB7ciBpbnRtYXAyLCBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KaW50ZXJ2YWxzIDwtIGMoMCwgMzc1MCwgNzUwMCwgMTEyNTAsIDE1MDAwKQ0KDQptYXB2aWV3KGJheV9hcmVhXzIwMjEsIHpjb2wgPSAiVG90YWxQb3AiKQ0KYGBgDQoNCmBgYHtyfQ0KIyBBc3N1bWluZyAnYmF5X2FyZWFfMjAxOCcgaXMgeW91ciBkYXRhIGZyYW1lIGFuZCAnVG90YWxQb3AnIGlzIHRoZSBjb2x1bW4gZm9yIHdoaWNoIHlvdSB3YW50IHF1YXJ0aWxlIGJyZWFrcw0KcXVhcnRpbGVfYnJlYWtzIDwtIHF1YW50aWxlKGJheV9hcmVhXzIwMjEkVG90YWxQb3AsIHByb2JzID0gYygwLCAwLjI1LCAwLjUsIDAuNzUsIDEpKQ0KDQojIFVzaW5nIG1hcHZpZXcgd2l0aCBxdWFydGlsZSBicmVha3MNCm1hcHZpZXcoYmF5X2FyZWFfMjAyMSwgemNvbCA9ICJUb3RhbFBvcCIsIGF0ID0gcXVhcnRpbGVfYnJlYWtzKQ0KYGBgDQoNCg0KDQojIyMgQ29tcGFyaW5nIFByb3BlcnR5IFZhbHVlcw0KDQpSZW50cyBpbiBoaWdoLWRlbnNpdHkgYXJlYXMgYW5kIGNlbnRyYWwgYnVzaW5lc3MgZGlzdHJpY3RzIGhhdmUgYWxzbyBkcm9wcGVkIHNpbmNlIHRoZSBwYW5kZW1pYydzIG9uc2V0LCByZWZsZWN0aW5nIGEgc2hpZnQgaW4gaG91c2luZyBkZW1hbmQgZnJvbSBjcm93ZGVkIHVyYmFuIGNlbnRlcnMgdG8gbW9yZSBzcGFjaW91cyBzdWJ1cmJzLiBSZW1vdGUgd29yayBoYXMgY29udHJpYnV0ZWQgdG8gYSBzdWJzdGFudGlhbCBkZWNyZWFzZSBpbiBjb21tZXJjaWFsIG9mZmljZSBvY2N1cGFuY3kgcmF0ZXMgYW5kIHN1YnNlcXVlbnQgZGVjbGluZXMgaW4gY29tbWVyY2lhbCBwcm9wZXJ0eSBwcmljZXMgaW4gZGVuc2VseSBwb3B1bGF0ZWQgQmF5IEFyZWEgdHJhY3RzLiBUaGUgZGVjbGluZSBpbiBwcm9wZXJ0eSB2YWx1ZXMgaXMgZHJpdmVuIGJ5IHdlYWx0aGllciByZXNpZGVudHMgbGVhdmluZyBoaWdoLXZhbHVlIHByb3BlcnRpZXMsIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gcmVkdWNlZCBwcm9wZXJ0eSB0YXhlcyBhbmQgc3RyYWluaW5nIHRoZSBjaXR5J3MgYnVkZ2V0LiBQcm9wZXJ0eSB2YWx1ZXMsIGFzIGluZGljYXRlZCBieSByZW50LCBhcmUgc2lnbmlmaWNhbnRseSBoaWdoZXIgaW4gdGhlIHN1YnVyYnMgb2YgU2FuIE1hdGVvIGFuZCBTYW50YSBDbGFyYS4NCg0KYGBge3IgY2hhcnRubWFwIGRhdGEsIGluY2x1ZGU9RkFMU0UsIHJlc3VsdHM9J2hpZGUnfQ0KDQpsaWJyYXJ5KHBhdGNod29yaykNCg0KdnRfaW5jb21lIDwtIGdldF9hY3MoDQogIGdlb2dyYXBoeSA9ICJjb3VudHkiLA0KICB2YXJpYWJsZXMgPSAiQjI1MDU4XzAwMUUiLA0KICBzdGF0ZSA9ICJDQSIsDQogIGNvdW50eSA9IGJheSwNCiAgeWVhciA9IDIwMjAsDQogIGdlb21ldHJ5ID0gVFJVRQ0KKSAlPiUNCiAgbXV0YXRlKE5BTUUgPSBzdHJfcmVtb3ZlKE5BTUUsICIgQ291bnR5LCBDYWxpZm9ybmlhIikpDQoNCg0KIyBDaG9yb3BsZXRoIG1hcA0KdnRfbWFwIDwtIGdncGxvdCh2dF9pbmNvbWUsIGFlcyhmaWxsID0gZXN0aW1hdGUpKSArIA0KICBnZW9tX3NmX2ludGVyYWN0aXZlKGFlcyhkYXRhX2lkID0gR0VPSUQpKSArIA0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYygpICsgICMgVXNlIHZpcmlkaXMgcGFsZXR0ZQ0KICB0aGVtZV92b2lkKCkrDQogIGd1aWRlcyhmaWxsID0gIm5vbmUiKSANCg0KIyBTY2F0dGVyIHBsb3Qgd2l0aCBlcnJvciBiYXJzDQp2dF9wbG90IDwtIA0KICBnZ3Bsb3QodnRfaW5jb21lLCBhZXMoeCA9IGVzdGltYXRlLCB5ID0gcmVvcmRlcihOQU1FLCBlc3RpbWF0ZSksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbCA9IGVzdGltYXRlKSkgKw0KICBnZW9tX2Vycm9yYmFyKGFlcyh4bWluID0gZXN0aW1hdGUgLSBtb2UsIHhtYXggPSBlc3RpbWF0ZSArIG1vZSkpICsNCiAgZ2VvbV9wb2ludF9pbnRlcmFjdGl2ZShjb2xvciA9ICJibGFjayIsIHNpemUgPSA0LCBzaGFwZSA9IDIxLA0KICAgICAgICAgICAgICAgICAgICAgICAgIGFlcyhkYXRhX2lkID0gR0VPSUQpKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKCkgKyAgIyBVc2UgdmlyaWRpcyBwYWxldHRlDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OmRvbGxhcl9mb3JtYXQoKSkgKyANCiAgbGFicyh0aXRsZSA9ICJNZWRpYW4gUmVudCBieSBjb3VudHkgaW4gdGhlIEJheSBBcmVhIiwNCiAgICAgICBzdWJ0aXRsZSA9ICIyMDIwIEFtZXJpY2FuIENvbW11bml0eSBTdXJ2ZXkiLA0KICAgICAgIHkgPSAiIiwNCiAgICAgICB4ID0gIk1lZGlhbiBSZW50IChiYXJzIHJlcHJlc2VudCBtYXJnaW4gb2YgZXJyb3IpIiwNCiAgICAgICBmaWxsID0gIk1lZGlhbiBSZW50IikgKyANCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxNCkNCg0KYGBgDQoNCmBgYHtyIGNoYXJ0bm1hcCwgZWNobz1GQUxTRX0NCg0KIyBDb21iaW5lIHRoZSBtYXBzDQoNCmdpcmFmZShnZ29iaiA9IHZ0X21hcCArIHZ0X3Bsb3QsIHdpZHRoX3N2ZyA9IDEyLCBoZWlnaHRfc3ZnID0gNSkgJT4lDQogIGdpcmFmZV9vcHRpb25zKG9wdHNfaG92ZXIoY3NzID0gImZpbGw6Y3lhbjsiKSkNCmBgYA0KDQojIyMgVGFrZWF3YXlzIGZvciBDaXR5IFBsYW5uZXJzDQoNClRoZSBhbmFseXNpcyBwcm92aWRlcyBjb21wZWxsaW5nIGV2aWRlbmNlIG9mIHRoZSBkb251dCBlZmZlY3QgdGFraW5nIHNoYXBlIGluIHRoZSBCYXkgQXJlYS4gVGhlIHdpZGVzcHJlYWQgYWRvcHRpb24gb2YgcmVtb3RlIHdvcmsgaXMgcmV2b2x1dGlvbml6aW5nIHRoZSB0cmFkaXRpb25hbCBkeW5hbWljcyBvZiBkYWlseSBjb21tdXRpbmcgdG8gY2l0eSBjZW50ZXJzLCBsaWtlIFNhbiBGcmFuY2lzY28uDQoNCkFzIGNvbXBhbmllcyBpbmNyZWFzaW5nbHkgZW1icmFjZSByZW1vdGUgd29yaywgZW1wbG95ZWVzIGV4cGVyaWVuY2UgcmVkdWNlZCBuZWNlc3NpdHkgZm9yIGRhaWx5IGNvbW11dGVzLCBwb3RlbnRpYWxseSByZXNoYXBpbmcgdGhlIGVzdGFibGlzaGVkIHBhdHRlcm5zIG9mIHJ1c2ggaG91ciB0cmFuc2l0IGFjdGl2aXR5IGFzc29jaWF0ZWQgd2l0aCBidXN0bGluZyBjaXR5IGNlbnRlcnMuIFRoaXMgc2hpZnQgaGFzIGltcGxpY2F0aW9ucyBmb3Igc3BlY2lmaWMgdHJhbnNpdCBsaW5lcywgc3VjaCBhcyB0aGUgVCBUaGlyZCBTdHJlZXQgbGluZSBjb25uZWN0aW5nIHNvdXRoZWFzdGVybiBuZWlnaGJvcmhvb2RzIGxpa2UgQmF5dmlldy1IdW50ZXJzIFBvaW50IGFuZCBWaXNpdGFjaW9uIFZhbGxleSB0byB0aGUgY2l0eSdzIGRvd250b3duIGFyZWEuIEVuY291cmFnaW5nIG1peGVkLXVzZSBkZXZlbG9wbWVudHMgaW50ZWdyYXRpbmcgYWZmb3JkYWJsZSBob3VzaW5nIHdpdGggZWZmaWNpZW50IHB1YmxpYyB0cmFuc3BvcnRhdGlvbiBvcHRpb25zIGNhbiBtaXRpZ2F0ZSB0aGUgZG9udXQgZWZmZWN0J3MgaW1wYWN0IGFuZCBwcm9tb3RlIHN1c3RhaW5hYmxlIHVyYmFuIGxpdmluZy4NCg0KVGhlIHRyZW5kIHRvd2FyZHMgcmVtb3RlIHdvcmsgYW5kIGNoYW5naW5nIHJlc2lkZW50aWFsIHByZWZlcmVuY2VzIG1heSBsZWFkIHRvIGEgcG90ZW50aWFsIGxvc3MgaW4gdGF4IHJldmVudWUgYXMgaW5kaXZpZHVhbHMgcmVsb2NhdGUgZnJvbSB1cmJhbiBhcmVhcywgaW1wYWN0aW5nIHRoZSB0cmFkaXRpb25hbCB0YXggYmFzZSBkZXJpdmVkIGZyb20gY2l0eSByZXNpZGVudHMuIFRoaXMgcG9zZXMgYSBjaGFsbGVuZ2UgZm9yIGNpdHkgZmluYW5jZXMsIGFzIGRlY3JlYXNlZCBwb3B1bGF0aW9uIGRlbnNpdHkgd2l0aGluIGNpdHkgbGltaXRzIGNvdWxkIHJlZHVjZSBwcm9wZXJ0eSB0YXhlcyBhbmQgb3RoZXIgY3JpdGljYWwgbG9jYWwgcmV2ZW51ZXMuIEluIGFudGljaXBhdGlvbiBvZiB0aGlzIHNob3J0ZmFsbCwgcGxhbm5lcnMgc2hvdWxkIHByb2FjdGl2ZWx5IHN0cmF0ZWdpemUgYW5kIGFkb3B0IGEgZm9yd2FyZC10aGlua2luZyBhcHByb2FjaCB0byBidWRnZXRpbmcuDQoNClRoZSBhZG9wdGlvbiBvZiByZW1vdGUgd29yayBwb2xpY2llcyBieSB0ZWNoIGNvbXBhbmllcyBpcyBwb2lzZWQgdG8gc2lnbmlmaWNhbnRseSBhbHRlciBvZmZpY2Ugc3BhY2UgdXRpbGl6YXRpb24uIEJ1c2luZXNzZXMgbWF5IHJlZHVjZSBvZmZpY2UgZm9vdHByaW50cyBpbiByZXNwb25zZSB0byBhIHJlbW90ZSB3b3JrZm9yY2UsIHJlc3VsdGluZyBpbiBwb3RlbnRpYWwgb2ZmaWNlIHZhY2FuY2llcy4gRW5jb3VyYWdpbmcgbWl4ZWQtdXNlIGRldmVsb3BtZW50IHByb2plY3RzIHdpdGhpbiBkb3dudG93biBhcmVhcyBjYW4gcmVqdXZlbmF0ZSBjaXR5IGNlbnRlcnMgYnkgY3JlYXRpbmcgdmlicmFudCwgMjQvNyBjb21tdW5pdGllcyBhcHBlYWxpbmcgdG8gYm90aCByZXNpZGVudHMgYW5kIGJ1c2luZXNzZXMuDQoNClRoZSBjb25zZXF1ZW5jZSBvZiB0aGVzZSBjaGFuZ2VzIGNhbiBpbmZsdWVuY2UgYnJvYWRlciBhc3BlY3RzIG9mIHVyYmFuIGRldmVsb3BtZW50LiBUaGVyZSBpcyBhIG5lZWQgZm9yIGNpdHkgcGxhbm5lcnMgdG8gYWRhcHQgYW5kIHN0cmF0ZWdpemUgZW5zdXJpbmcgYSBoYXJtb25pb3VzIHRyYW5zaXRpb24gaW4gdGhlIEJheSBBcmVhJ3MgdXJiYW4gbGFuZHNjYXBlLiANCg0K